// 在typescript中，我们使用接口interfaces来定义对象的类型

/** 接口
 * 在面向对象的语言中，是n个行为的抽象/描述，但没有实现，由类去实现TS中，接口也可以包含状态
 * 
 * 接口类型的对象
 * - 多/少了一些属性是不允许的
 * - 可选属性：？
 * - 只读属性：readonly
 */

//  创建人的对象，需要对人的属性进行一定的约束
/**
 * id是number类型，必须有，只读的
 * name是string类型，必须有
 * age是number类型，必须有
 * sex是string类型，不可没有
 */

interface IPerson {
  readonly id: number
  name: string
  age: number
  sex?: string
}

const p1: IPerson = {
  id: 1,
  name: 'tom',
  age: 12,
  sex: '男'
}
const p2: IPerson = {
  id: 2,
  name: 'Jack',
  age: 13
}
//p2.id = 2 //不可以
p2.name = 'bob'


